package com.ruyuan.eshop.diplomacy.manager.common.db;


import com.ruyuan.eshop.diplomacy.manager.common.cache.RedisSortedSetCache;
import com.ruyuan.eshop.diplomacy.manager.common.cache.RedisStringCache;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

/**
 * sorted set类型数据源
 *
 * @author zhonghuashishan
 */
public interface RedisSortedSetDatabase<T> {

    /**
     * 数据源单表
     *
     * @param
     * @return java.lang.String
     * @author zhonghuashishan
     */
    String getTableName();

    /**
     * 数据源全量表
     *
     * @param
     * @return java.util.Set<java.lang.String>
     * @author zhonghuashishan
     */
    Set<String> getTableNameSet();
    /**
     * 获取表数据
     *
     * @param tableFieldsMap    key 数据库字段，value 字段值
     * @param queryType         查询类型，多数据查询时区分
     * @return java.util.Optional<T>
     * @author zhonghuashishan
     */
    Optional<T> getTableData(Map<String, Object> tableFieldsMap, String queryType);

    /**
     * 获取增量数据
     *
     * @param tableName 表名
     * @return java.util.Optional<java.util.Map<java.lang.String,com.ruyuan.eshop.diplomacy.manager.common.source.RedisSortedSetSource>> key 表名，value 主键ID集合
     * @author zhonghuashishan
     */
    Optional<Map<String, RedisSortedSetCache>> listIncrMap(String tableName);

    /**
     * 获取全量数据
     *
     * @param tableName 表名
     * @param idSet     指定主键ID
     * @return java.util.Optional<java.util.Map<java.lang.String,com.ruyuan.eshop.diplomacy.manager.common.source.RedisSortedSetSource>> key 表名，value 主键ID集合
     * @author zhonghuashishan
     */
    Optional<Map<String, RedisSortedSetCache>> listIncrMap(String tableName, Set<String> idSet);

    /**
     * 获取实体数据
     *
     * @param
     * @return java.util.Optional<com.ruyuan.eshop.diplomacy.manager.common.cache.RedisSortedSetCache<T>>
     * @author zhonghuashishan
     */
    Optional<RedisSortedSetCache<T>> listEntityData();

    /**
     * 获取单表所有主键ID集合
     *
     * @param
     * @return java.util.Optional<java.util.List<java.lang.String>>
     * @author zhonghuashishan
     */
    Optional<List<String>> getTableAllIdList();

    /**
     * 获取全部表数据
     *
     * @param
     * @return java.util.Optional<java.util.Map<java.lang.String,com.ruyuan.eshop.diplomacy.manager.common.source.RedisSortedSetSource>>
     * @author zhonghuashishan
     */
    Optional<Map<String, RedisSortedSetCache>> listAllTableData();

    /**
     * 根据ID批量获取数据
     *
     * @param idSet         表主键ID集合
     * @param queryType     查询类型，多数据查询时区分
     * @return java.util.Optional<com.ruyuan.eshop.diplomacy.manager.common.source.RedisStringSource<T>>
     * @author zhonghuashishan
     */
    Optional<RedisSortedSetCache<T>> listTableDataByIdSet(Set<Integer> idSet, String queryType);

}
